112 research outputs found
Tracing OCaml Programs
This presentation will cover a framework for application-level tracing of
OCaml programs. We outline a solution to the main technical challenge, which is
being able to log typed values with lower overhead and maintenance burden than
existing approaches. We then demonstrate the tools we have built around this
for visualizing and exploring executions
A New Constructive Method for the One-Letter Context-Free Grammars
Constructive methods for obtaining the regular grammar counterparts for some sub-classes of the context free grammars (cfg) have been investigated by many researchers. An important class of grammars for which this is always possible is the one-letter cfg. We show in this paper a new constructive method for transforming arbitrary one-letter cfg to an equivalent regular expression of star-height 0 or 1. Our new result is considerably simpler than a previous construction by Leiss, and we also propose a new normal form for a regular expression with single-star occurrence. Through an alphabet factorization theorem, we show how to go beyond the one-letter cfg in a straight-forward way.Singapore-MIT Alliance (SMA
Specification, Verification and Inference (Invited Talk)
Traditionally, the focus of specification mechanism has been on improving its ability to cover a wider range of problems more accurately, while the effectiveness of verification is left to the underlying theorem provers. Our work attempts a novel approach, where the focus is on designing good specification mechanisms that can achieve both better expressiveness and better verifiability. Moreover, we shall also highlight a unified specification mechanism that can be used for both verification and inference. Our framework allows preconditions and postconditions to be selectively inferred via a set of uninterpreted relations which are computed using bi-abduction, and modularly synthesized to support concise specification for program codes
Towards An Automated Approach to Hardware/Software Decomposition
We propose in this paper an algebraic approach to hard-ware/software partitioning in Verilog Hardware Description Language (HDL). We explore a collection of algebraic laws for Verilog programs, from which we design a set of syntax-based algebraic rules to conduct hardware/software partitioning. The co-specification language and the target hardware and software description languages are specific subsets of Verilog. Through this, we confirm successful verification for the correctness of the partitioning process by an algebra of Verilog. Facilitated by Verilog’s rich features, we have also successfully studied hw/sw partitioning for environment-driven systems.Singapore-MIT Alliance (SMA
Staged Specifications for Automated Verification of Higher-Order Imperative Programs
Higher-order functions and imperative references are language features
supported by many mainstream languages. Their combination enables the ability
to package references to code blocks with the captured state from their
environment. Higher-order imperative programs are expressive and useful, but
complicate formal specification and reasoning due to the use of
yet-to-be-instantiated function parameters, especially when their invocations
may mutate memory captured by or reachable from their arguments.
Existing state-of-the-art works for verifying higher-order imperative
behaviors are restricted in two ways: achieving strong theoretical results
without automated implementations, or achieving automation with the help of
strong assumptions from dedicated type systems (e.g. Rust). To enable an
automated verification solution for imperative languages without the above
restrictions, we introduce Higher-order Staged Separation Logic (HSSL), an
extension of Hoare logic for call-by-value higher-order functions with ML-like
local references.
In this paper, we design a novel staged specification logic, prove its
soundness, develop a new automated higher-order verifier, Heifer, for a core
OCaml-like language, report on experimental results, and present various case
studies investigating its capabilities
Region Type Checking for Core-Java
Region-based memory management offers several important advantages over garbage-collected heap, including real-time performance, better data locality and efficient use of limited memory. The concept of regions was first introduced for a call-by-value functional language by Tofte and Talpin, and has since been advocated for imperative and object-oriented languages. Scope memory, a lexical variant of regions, is now a core feature in a recent proposal on Real-Time Specification for Java (RTSJ). In this paper, we propose a region-based memory management system for a core subset of Java. Our region type analysis can completely prevent dangling references and thus is ready to cater for the no-dangling requirement in RTSJ. Our system also supports modular compilation, which is an important feature for Java, but was missing in recent related work.Singapore-MIT Alliance (SMA
Incremental Verification of Timing Constraints for Real-Time Systems
Testing constraints for real-time systems are usually verified through the satisfiability of propositional formulae. In this paper, we propose an alternative where the verification of timing constraints can be done by counting the number of truth assignments instead of boolean satisfiability. This number can also tell us how “far away” is a given specification from satisfying its safety assertion. Furthermore, specifications and safety assertions are often modified in an incremental fashion, where problematic bugs are fixed one at a time. To support this development, we propose an incremental algorithm for counting satisfiability. Our proposed incremental algorithm is optimal as no unnecessary nodes are created during each counting. This works for the class of path RTL. To illustrate this application, we show how incremental satisfiability counting can be applied to a well-known rail-road crossing example, particularly when its specification is still being refined.Singapore-MIT Alliance (SMA
- …